package com.example.base.service.impl;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.base.entity.Course;
import com.example.base.entity.Skill;
import com.example.base.entity.Type;
import com.example.base.mapper.TypeMapper;
import com.example.base.service.TypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class TypeServiceImpl implements TypeService {

    @Autowired
    TypeMapper typeMapper;

    @Override
    public IPage<Type> selectType(Type type, Integer page, Integer size) {

        LambdaQueryWrapper<Type> wrapper = Wrappers.lambdaQuery();

        // 类型id
        wrapper.eq(ObjectUtils.isNotEmpty(type.getTypeId()), Type::getTypeId, type.getTypeId());
        // 类型名
        wrapper.eq(ObjectUtils.isNotEmpty(type.getTypeName()), Type::getTypeName, type.getTypeName());
        // 类型名
        wrapper.eq(ObjectUtils.isNotEmpty(type.getPreTypeName()), Type::getPreTypeName, type.getPreTypeName());

        Page<Type> page1 = new Page<>(page, size);
        return typeMapper.selectPage(page1, wrapper);
    }

    @Override
    public List<Type> selectAllType() {
        LambdaQueryWrapper<Type> wrapper = Wrappers.lambdaQuery();
        return typeMapper.selectList(wrapper);
    }

    @Override
    public Integer addType(Type type) {
        // 如果有前置id传进来，要获取到前置id对应的名称
        try {
            // 获取前置id对应的type1对象
            Type type1 = typeMapper.selectById(type.getPreTypeId());
            // 给type添加前置名称
            type.setPreTypeName(type1.getTypeName());
        }catch (Exception e){
            e.printStackTrace();
        }
        return typeMapper.insert(type);
    }

    @Override
    public Integer updateType(Type type) {
        // 如果有前置id传进来，要获取到前置id对应的名称
        try {
            // 获取前置id对应的type1对象
            Type type1 = typeMapper.selectById(type.getPreTypeId());
            // 给type添加前置名称
            type.setPreTypeName(type1.getTypeName());
        }catch (Exception e){
            e.printStackTrace();
        }
        return typeMapper.updateById(type);
    }

    @Override
    public Integer delType(String typeId) {
        LambdaUpdateWrapper<Type> wrapper = Wrappers.lambdaUpdate();
        // 根据id更新删除标识
        wrapper.eq(Type::getTypeId, typeId).set(Type::getDelSign, 1);
        return typeMapper.update(null, wrapper);
    }
}
